with Generic_Sorted_List;
with Ada.Strings.Unbounded;
use Ada.Strings.Unbounded;
with Rotation_Package;
use Rotation_Package;
--with Message;
--use Message;
-------------------------------------------------
-- Parts.Operations paketet. Childpackage till --
-- Parts paketet. Detta paket krävs för att    --
-- kunna skapa Part_List listan.               --
-------------------------------------------------
package Parts.Operations is

   -------------------------------------------------
   -- String_Array är den array som innehåller    --
   -- den uppdelade strängen för ett              --
   -- delbeskrivningsmeddelande från servern.     --
   -------------------------------------------------
   type String_Array is array (1..100) of Unbounded_String;

   -------------------------------------------------
   -- Listan som innehåller alla parts som skall  --
   -- användas för att skapa en figur.            --
   -------------------------------------------------
   package Part_List is new Generic_Sorted_List(Data_Type => Part_Type,
                                                Key_Type => Integer,
                                                Get_Key => Parts.Get_Key);
   use Part_List;

   -------------------------------------------------
   -- Create_Part_List är en funktion som skapar  --
   -- en lista innehållande alla de parts som     --
   -- servern skickar över.                       --
   -- Inparameter: String_Array innehållande ett  --
   -- delbeskrivningsmeddelande.                  --
   -- Returvärde: Listan som innehåller alla de   --
   -- parts som fanns i delbeskrivningsmeddelandet--
   -------------------------------------------------
   function Create_Part_List(Input : in String_array)
                            return Part_List.List_Pointer;


   -------------------------------------------------
   -- Rotate_Part används för att rotera en Part. --
   -- Går igenom delens koordinat-lista och       --
   -- roterar dem en och en.                      --
   -------------------------------------------------
   procedure Rotate_Part(Coord_List : in out Coordinate_List.List_Pointer;
                         Rotation_Angle : in Float;
                         Rotation_Axis : in Character);


   -------------------------------------------------
   -- Move_Part används för att förflytta en part.--
   -- Går igenom delens koordinat-lista och       --
   -- förflyttar dem en och en.
   -------------------------------------------------
   procedure Move_Part(Coord_List : in out Coordinate_List.List_Pointer;
                       X, Y, Z : in Integer);

   function Move_Part(Coord_List : in Coordinate_List.List_Pointer;
                      X, Y, Z : in integer) return Coordinate_List.List_Pointer;
   -------------------------------------------------
   --
   --
   -------------------------------------------------
   function Member(Left : in Coordinate_List.List_Pointer;
                   Right : in Coordinate_List.List_Pointer)
                  return Boolean;


end Parts.Operations;

